home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er Special 15
/
64er_Magazin_Sonderheft_15_19xx_Markt__Technik_de_Side_A.d64
/
int-floppy src
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
7KB
|
255 lines
1 ; *** intelligente floppy ****
2 ; ****************************
3 ; * written by stefan rother *
4 ; * frauenzellstrasse 26 *
5 ; * 8400 regensburg *
6 ; ****************************
7 ; * (c) 1986 markt&technik *
8 ; * verlag ag *
9 ; ****************************
10 .ba$ce18 ;start bei 52760
20 jsr$aefd;auf komma pruefen
30 jsr$b79e;8 bit-zahl nach x holen
60 stxz1;und zwischenspeichern
65 lda#07;maske zum ausfiltern
70 andz1;von bit 0-2 erstellen
74 ;
75 ;sprungtabelle
76 ;
80 bney1;bei 0
85 jmpload1;prg mit ',8' laden
90 y1 cmp#01;mit 1 vergleichen
100 bney2;wenn 1 ,dann
105 jmpload2;prg mit ',8,1' laden
110 y2 cmp#02;mit 2 vergleichen
120 bney3;wenn 2 ,dann
125 jmpsave;zur saveroutine springen
130 y3 cmp#03;mit 3 vergleichen
140 bney4;wenn 3 ,dann
145 jmpgoto;'goto'-routine aufrufen
150 y4 cmp#04;und dasselbe mit 4
160 bney5;wenn 4,dann
165 jmpjump;'jmp'-assemblerbefehl
170 y5 rts;wenn kein modus,dann zurueck
180 ;
185 ;algorithmus zum auswerten
186 ;eines diskettenwechsels
188 ;
190 floppy lda#08;parameter fuer
200 ldx#08;'open 8,8,15'
210 ldy#15;setzen
220 jsr$ffba;file vorbereiten
230 lda#00;kein filename
240 jsr$ffbd;filenamen vorbereiten
250 jsr$ffc0;'open'
260 jmpa;zur datenauswertung
270 x ldx#08;fuer kanal 8
280 jsr$ffc9;cmd out aktivieren
290 ldx#00;zaehler auf null
300 b1 ldat1,x;und von floppy
310 jsr$ffd2;per befehlssequenz
320 inx;von 6 zeichen
330 cpx#06;inhalt von $1c00
340 bneb1;abfragen
350 jsr$ffcc;cmd off
360 y ldx#08
370 jsr$ffc6;cmd in aktivieren
380 jsr$ffcf;besagtes byte holen
385 pha;und zwischenspeichern
390 jsr$ffcc;cmd inaktivieren
395 pla;byte zurueckholen
400 rts;ende des unterprg's 'daten holen'
410 ;
411 ;fortfuehrung des hauptprogramms
412 ;
415 a jsrbit05;bit 5=1 (dikettenwechsel) ?
417 jsrled;ja,dann je nach bit 6 led an
420 jsrx;hole aktuelles infobyte
430 andz2;und filtere lichschrankenbit
440 bnea;heraus-bei 1 warten
450 ;
460 b jsrx
470 andz2
480 beqb;warte bis bit=1,ls-unterbrechung
485 ;
490 c jsrled;einsprung,wenn vorher bit5=0
500 jsrx
510 andz2
520 bnec;warte,bis ls frei
530 ;
540 ldaz1;bit 7 des befehlbytes testen
550 bplf;bei 1 schreibschutz
560 ;
570 j ldx#$ff;warteschleife
580 e ldy#$ff;wegen schreibschutz
590 d dey
600 bned
610 dex
620 bnee
630 jmpg
640 ;
650 f jsrx;wenn kein schreibschutz,
660 andz2;dann auf kerbe
670 beqf;warten
680 ;
690 g ldx#$02;unbedingte warteschleife
700 k ldy#$a0
704 i decz5
706 bnei
710 h dey
720 bnei
730 dex
740 bnek
745 ;
750 ;routine ,die den motor der floppy einschaltet
755 ;und auf geschlossenes laufwerk prueft
756 ;
760 ldx#08;kanal 8
766 ;
770 jsr$ffc9;fuer cmd out
780 ldx#00
790 b2 ldat2,x
800 jsr$ffd2
810 inx
820 cpx#05;laenge des befehls
830 bneb2
840 jsr$ffcc;cmd inaktivieren
841 ldx#08;nochmals fuer neue anweisung
842 jsr$ffc9;aktivieren,um
843 ldx#00;der floppy eine kurze
844 b4 ldat4,x;initialisierungzeit
845 jsr$ffd2;zu gestatten
846 inx
847 cpx#06;diemal 6 befehlbytes
848 bneb4
849 jsr$ffcc;kanal 8 inaktivieren
850 jsry;laufwerk schon einsatzbereit ?
860 cmp#$ff
870 beqg;nein
880 ;
890 lda#08
900 jsr$ffc3;close 8
910 rts;ende der auswertung
1470 ;
1480 ;hier wird das hauptprogamm je nach
1490 ;befehlsbyte weitergefuehrt
1495 ;
1500 load1 lda#00;kennzeichen fuer
1510 stakk+1;'load ,8'
1520 jmpload;zur laderoutine
1540 load2 lda#01;oder fuer absolutes laden
1550 stakk+1;'load ,8,1'
1555 load jsr$aefd;prueft auf komma
1560 jsrfloppy;auf diskettenwechsel warten
1575 jsrget;filenamen holen
1576 jmpld;und laden
1580 get jsr$ad9a;vorauswerten und
1590 jsr$b6a3;auswerten des filenamens
1600 staz4;laenge,
1610 stxlo;lo-adresse und
1620 styhi;hi-adresse merken
1700 rts;zurueck
1710 ;---
1720 goto jsr$aefd;auf komma pruefen
1730 jsrfloppy;auf diskettenwechsel warten
1750 jsr$ad8a;sprungadresse fuer 'goto' holen
1760 jsr$b7f7;in 16 bit zahl wandeln
1770 jsr$a8a3;einsprung in die 'goto'-routine
1780 jmp$a7ae;und zur interpreterschleife
1790 ;
1800 jump jsr$aefd;auf komma pruefen
1810 jsrfloppy;auf diskettenwechsel warten
1830 jsr$ad8a;sprungadresse fur 'jmp' holen
1840 jsr$b7f7;in 16 bit zahl wandeln
1846 lda#$a7;startadresse des basic-
1847 pha
1848 lda#$ae;interpreters auf stack
1849 pha
1850 jmp($14);und zum maschinenprogramm
1860 ;
1861 save ldaz1;wenn save und schreib-
1863 bplon;schutz zusammen,dann
1865 jsr$b248;'illegal quantity error'
1870 on jsr$aefd;auf komma pruefen
1880 jsrfloppy;auf diskettenwechsel warten
1900 jsrget;filenamen holen
1910 ldx#08;geraeteadresse 8
1920 jsr$ffba;file vorbereiten
1930 ldxz4;laenge
1940 ldxlo;und adresse des file-
1950 ldyhi;namens holen
1960 jsr$ffbd;filenamen vorbereiten
1965 jsrget16;16 bit startadresse fuer save
1967 stx$fe;merken
1969 sty$ff
1971 jsrget16;16 bit endadresse fuer save
1973 lda#$fe;steht bei $fe/$ff
1975 jmpcont
1976 ;
1977 ;routine zum holen einer 16 bit zahl und auswertung
1978 ;
1979 get16 jsr$aefd;komma?
1981 jsr$ad8a;16 bit zahl holen
1983 jsr$b7f7;und umwandeln
1985 ldx$14;lo-byte
1987 ldy$15;hi-byte der zahl
1989 rts;ende der unterroutine
1990 ;
2000 cont jsr$ffd8;'save'
2010 rts;zurueck zu basic
2015 ;
2020 ;laden eines programms
2025 ;
2030 ld ldx#08
2040 kk ldy#01
2050 jsr$ffba;file vorbereiten
2060 ldaz4
2070 ldxlo
2080 ldyhi
2090 jsr$ffbd;filenamen vorbereiten
2100 lda#00;load-flag auf 0
2101 sta$0a;und merken
2103 jmp$e16f;einsprung in die 'load'-routine
2200 ;
2340 ;routine prueft bit 6 des befehlbytes
2345 ;und schaltet bei 1 die rote led am
2346 ;laufwerk an.
2348 ;
2350 led lda#64
2360 andz1;test auf bit 6
2380 beqende;bei 0 'rts'
2390 ldx#08
2400 jsr$ffc9;cmd out aktivieren
2410 ldx#00
2420 b3 ldat3,x
2430 jsr$ffd2
2440 inx
2450 cpx#05;5 befehlbytes
2460 bneb3
2470 jsr$ffcc;cmd inaktivieren
2480 ende rts;ende des unterprogramms
2490 bit05 lda#32;testet bit 5 des befehlbytes
2500 andz1
2530 bneende;gesetzt,dann diskettenwechsel
2540 pla;nein,
2550 pla;dann stack "saeubern"
2560 jmpc;und weiter auf diskette warten
2570 ;
2575 ;tabelle von anweisungen und (aktuellen)
2576 ;zwischenspeichern
2580 ;
2610 t1 .tx"m-r";auslesen des diskkontrollers
2620 .by00,28,1 ;der floppy (wegen ls)
2630 t2 .tx"m-e";floppymotor
2640 .by71,198 ;einschalten und auf 'ready' testen
2644 t3 .tx"m-e";befehlssequenz fuer
2646 .by$18,$c1 ;led am laufwerk anschalten
2650 t4 .tx"m-r";schon 'ready' ?
2660 .by$ff,0,1
2670 z1 .by$00;platz fuer befehlsbyte
2680 z2 .by$10;16 fuer 'and' verknuepfung (ls)
2700 z4 .by$00;speicher fuer filenamenlaenge
2705 z5 .by$00;zaehler fuer warteschleife
2730 lo .by$00;zwischenspeicher fuer
2740 hi .by$00;filenamenadresse